package com.ollobot.authorization.exception;

/**
 * 邮箱发送异常
 * 当邮箱发送失败时抛出此异常
 */
public class EmailSendException extends RuntimeException {
    
    private final String email;
    private final String errorType;
    
    /**
     * 构造函数
     * @param message 异常消息
     * @param email 目标邮箱地址
     * @param errorType 错误类型
     * @param cause 原始异常
     */
    public EmailSendException(String message, String email, String errorType, Throwable cause) {
        super(message, cause);
        this.email = email;
        this.errorType = errorType;
    }
    
    /**
     * 构造函数
     * @param message 异常消息
     * @param email 目标邮箱地址
     * @param errorType 错误类型
     */
    public EmailSendException(String message, String email, String errorType) {
        super(message);
        this.email = email;
        this.errorType = errorType;
    }
    
    /**
     * 获取目标邮箱地址
     * @return 邮箱地址
     */
    public String getEmail() {
        return email;
    }
    
    /**
     * 获取错误类型
     * @return 错误类型
     */
    public String getErrorType() {
        return errorType;
    }
    
    /**
     * 邮箱发送错误类型常量
     */
    public static class ErrorType {
        public static final String INVALID_EMAIL = "INVALID_EMAIL";           // 邮箱地址无效
        public static final String EMAIL_NOT_REACHABLE = "EMAIL_NOT_REACHABLE"; // 邮箱地址不可达
        public static final String SMTP_ERROR = "SMTP_ERROR";                 // SMTP服务器错误
        public static final String AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED"; // 认证失败
        public static final String NETWORK_ERROR = "NETWORK_ERROR";           // 网络错误
        public static final String TEMPLATE_ERROR = "TEMPLATE_ERROR";         // 模板渲染错误
        public static final String UNKNOWN_ERROR = "UNKNOWN_ERROR";           // 未知错误
    }
}
